package com.ttbj.api.zwrefund;

import java.util.List;

import com.ttbj.api.dto.Page;
import com.ttbj.api.dto.zwrefund.ZwRefundDto;
import com.ttbj.api.exception.BusinessException;

public interface ZwRefundService {
	
	/**
	 * 查询所有的退款申请单列表
	 * @param refundOrderNum 订单号
	 * @param refundPayNum 支付时的支付编号
	 * @param refundCode 审核状态
	 * @param page 分页信息
	 * @return
	 * @throws BusinessException
	 */
	public List<ZwRefundDto> findZwRefundInfoByPage(String refundOrderNum, 
													String refundPayNum, 
													Integer[] refundCode,
													Page page) throws BusinessException;
	
	/**
	 * 查询所有的退款申请单列表数量
	 * @param refundOrderNum 订单号
	 * @param refundPayNum 支付时的支付编号
	 * @param refundCode 审核状态
	 * @return
	 * @throws BusinessException
	 */
	public Integer findZwRefundInfoByPageCount(String refundOrderNum, 
											   String refundPayNum, 
											   Integer[] refundCode) throws BusinessException;
	
	/**
	 * 支付宝、微信、微信小程序退款操作
	 * @param refundType 退款方式：0微信，1支付宝，2微信小程序
	 * @param refundAmt 退款金额：单位元
	 * @param refundPayNum 支付时使用的支付编号
	 * @param refundId 退款申请列表中的主键id
	 * @return
	 * @throws BusinessException
	 */
	public void zwRefundOperation(Integer refundType, String refundAmt, String refundPayNum, Integer refundId, Long orderId) throws BusinessException;
	
	/**
	 * 微信支付退款查询
	 * @param refundPayNum 支付时使用的微信订单号（transaction_id）
	 * @param refundCode 未查询前的退款状态
	 * @param refundId 退款单的主键id
	 * @throws BusinessException
	 */
	public Integer wxRefundQuery(String refundPayNum, Integer refundCode, Integer refundId) throws BusinessException;
	
	/**
	 * 支付宝退款查询
	 * @param refundPayNum 支付时使用的支付宝订单号（trade_no）
	 * @param outTradeNo 
	 * @param refundCode 未查询前的退款状态
	 * @param refundId 退款单的主键id
	 * @throws BusinessException
	 */
	public Integer zfbRefundQuery(String refundPayNum, String outRequestNo, Integer refundCode, Integer refundId) throws BusinessException;
	
	/**
	 * 设置审核状态为未通过，同时分配给业务员，分配给司机中的关于这条订单的信息进行删除
	 * @param refundCode 未通过审核状态：2
	 * @param refundId 退款单id
	 * @param 订单id
	 * @throws BusinessException
	 */
	public void editRefundAuditFailed(Integer refundCode, Integer refundId, Long orderId) throws BusinessException;
}
